23

» WarCraft 3 / Горючая смесь

Похожие вопросы:

ответ
doleo82, я бы тебе предложил переложить скилл на полностью триггерную основу, тогда можно будет регулировать урон в момент его нанесения, в зависимости от каких-либо условий...
ответ
Тут вся инфа про типы урона и атаки от спелов.

23

» WarCraft 3 / Хеш таблица

Похожие вопросы:

ответ
Скачаю чистый варкрафт 1.26 попробую.
Рекомендую эти торренты.
Русская версия.
Английская версия.
ответ
Сохраняете на хэндл здания группу юнитов и дело в шляпе.
ответ
Black Soul:
ArhiMEN:
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Так не нужно ничего самому делать. Я прикрепил к тому сообщению карту. В ней я уже все сделал сам. Тебе осталось только скопировать триггеры оттуда в свою карту и заменить юнитов на тех, которые тебе нужны. Вот та карта:
Bergi_Bear, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
ответ
Стас Орлов, ну ты же как-то прикрепил группу к строению? Тут тоже самое, только строение к юниту.
call SaveUnitHandle(твой_хеш, GetHandleId(твой_юнит), твоё_число, твоё_строение)
При смерти узнавай строение.
set Host = LoadUnitHandle(твой_хеш, GetHandleId(умерший_юнит), твоё_число)
set Dead = LoadInteger(твой_хеш, GetHandleId(Host), другое_твоё_число)
call SaveInteger(твой_хеш, GetHandleId(Host), другое_твоё_число, Dead + 1)
// Не забываем чистить хеш.
call FlushChildHashtable(твой_хеш, GetHandleId(умерший_юнит))
Через некоторое время создавай новых юнитов.
set Group = LoadGroupHandle(твой_хеш, GetHandleId(твоё_строение), твоё_число_2)
set Dead = LoadInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число)
if Dead > 0 then
    call SaveInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число, 0)
    loop
        set Dead = Dead - 1
        set Unit = CreateUnit(...)
        call GroupAddUnit(Group, Unit)
        call SaveUnitHandle(твой_хеш, GetHandleId(Unit), твоё_число, твоё_строение)
        exitwhen Dead == 0
    endloop
endif
ответ
да, массив постоянно будет делать reAllocMem , если текущий размер окажется мельче, чем номер ячейки. Поэтому, если массив будет часто писаться с инкрементом, то выгоднее сперва прописать в последнее допустимое значение (8191 для 26 патча) типа MyArray[8191]=0
чисто чтобы его по памяти не возили туда-сюда каждые X значений (не смотрел, сколько изначально выделяется)
я вот у себя пофиксил такую же байду с таблицей строк. игра выделяет по 16 ячеек под строки, а у меня в доте они генерируются десятками в секунду. Каждую секунду игра делала ре-аллок памяти, а к середине игры там уже несколько мб таблица туда-сюда ездила. Сделал аллок в разы больше - и таблица всего 2 раза переедет за 40 минут игры максимум. Экономия тактов налицо.
Хеш-таблицы вообще не являются массивами, гугл в помощь, поэтому там об этом думать не стоит. Стоит думать лучше о том, чтобы первичных (родительских) ключей было меньше, чем вторичных, чисто исходя из того, что в этом случае перебор по таблице окажется быстрее

23

» WarCraft 3 / Апгрейд одного юнита до другого

Похожие вопросы:

ответ
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя

23

» WarCraft 3 / Syntax Error

Похожие вопросы:

ответ
Ничего не помогло, все та же ошибка, хоть и удалось указать папку с вариком.
ответ
~8gabriel8:
Как бы вообще не понял сути вопроса, но судя по этому комментарию, не получается удалить в РО карты синий объект из кампании. Это нормально, удалять надо в РО редактора кампании.
ответ
Надо mdlvis другой версии 1.39 насколько помню
ответ
у меня тоже так скачай версию 1.05

ответ
Проблема решена.Это было из-за модели. Углубляться в подробности не буду.

23

» WarCraft 3 / Музыкальный список

Похожие вопросы:

ответ
от бж избався
native StopMusic takes boolean fadeOut returns nothing
попробуй

23

» WarCraft 3 / Своя фоновая музыка

Похожие вопросы:

ответ
можно задать постоянную музыку при входе юнита в область.
А выключать её по событию "юнит покидает область".
Они же рядом события эти, чего усложнятьв сё.

23

» WarCraft 3 / Редактор ИИ и доп. рудник

Похожие вопросы:

ответ
PomaH:
Fraps:
Ну так в условия строительства - только лагерь 2(доп лагерь).
И можно ещё поставить при условии, что есть больше 1 ратуши (т.е. 2 лагерь 100% построен).
Мой бот единовременно владеет только 1 рудником. 2 ратуши это решение только для первого экспа, у меня на карте много рудников по небольшому количеству золота, комп должен возле каждого из них обустраивать оборону из вышек.
Только что проверил выставил строить у рудника №2 при условии что есть 2 ратуши, и он гад все равно стоит на главной базе,где рудник уже закончился.
Хм... То есть ты делал башни компу, поставил им место только во 2 лагере... Или у 2 рудника. И только при условии что у него есть 2 ратуши или заняты 2 рудника? Хм... Если он их строит, то он понимает что есть 2 рудника/ратуши, но не понимает где именно 2 рудник находится.

23

» WarCraft 3 / Изменение графики на SD

Похожие вопросы:

ответ
Он кладет это дело в память после preloader`а Можно код изменять напрямую в озу.

23

» WarCraft 3 / Отлавливать урон.

Похожие вопросы:

ответ
Кастовать способности даммиком и отлавливать урон от него.
ответ
всё как сказал Borodach
чтобы такой фигни не было надо запускать таймер на 0 секунд и им восстанавливать здоровье
также при получении урона надо давать скил на +100500 хп а таймером этот скил убирать и устанавливать нужное количество хп
подобных вопросов было дофига и готовых решений как следствие тоже дофига
я вроде тоже как то кидал свою систему обнуления урона
ответ
у меня тут дело в том что герои и так моментально ресаются, но отнимается жизни и они улетают на точку реса, а если сработает крест или реинкарнация юнит никуда не улетает а просто ждёт свой таймер и ресается...А что я собственно говоря туплю, у меня же смерти все триггерные как никак, просто в общем событии не отнимать жизнь если прокнул шанс, и не переносить на стартовую локу, а просто реснуть с задержкой. Спасибо за наводку парни 8gabriel8, pro100master, PT153, Absolute, KingMaximax, ssbbssc, , я понял, что мне нужно сделать
ответ
local DamageTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- до вычета брони
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- после вычета брони
end
TriggerAddAction(DamageTrigger, function()
	local damage     = GetEventDamage() -- число урона
	local damageType = BlzGetEventDamageType() -- тип урона
	local target     = GetTriggerUnit() -- тот кто получил урон
	local caster     = GetEventDamageSource() -- тот кто нанёс урон
end)

23

» WarCraft 3 / Щит молний.

Похожие вопросы:

ответ
Можно сделать на основе заклинания Жар Преисподней, но без триггеров тут не обойтись.
ответ
Нет, допустимые цели прописаны в движке игры, делаем триггерный щит молний, благо это очень примитивная способность.
ответ
Еще раз, 'Aams' - щит от магии, он дает маг имун и только. 'Aam2' - нейтрализует урон от магии, при этом в цель можно применять заклинания, обрати внимание там другой бафф.
ответ
Активация либо канал, либо любой скил без цели, и дамми каст щита молний на этого героя.
Может быть получится с руной щита молний, но не факт, надо проверять
ответ
Можно сделать способность, которая убирает пни в некотором радиусе. Вот пример.

23

» WarCraft 3 / черные квадраты

Похожие вопросы:

ответ
Кажется я понял в чем дело. В общем, в карте монолит в импорте файлик LoadingScreen.mdx весит 3 кб, когда я его экспортирую на рабочий стол, а затем импортирую обратно в карту с рабочего стола, то он почему-то начинает весить не 3, а 1 кб, а Лоадскрин не показывается при загрузке карты. Но из-за чего это происходит я не знаю.
ответ
Неполадки исправил удалив папку UI. Графон от плойки исправился внутри игры в настройках - они сбросились.
ответ
8gabriel8, Я полагал, что чёрные - юниты/объекты внутри, а красные - юниты/объекты вокруг, вот собственно его задача была расстановка юнитов/объектов вокруг, но ты прав, нужно больше информации.
ответ
Сделал моделаль, у меня работает. Посмотри может ты что-то сделал не так.
ответ
Думаю ваш друг имеет урезаный варкрафт который подгружает только стандартные а все что новые не отобразит или зеленым

23

» WarCraft 3 / нерабочий триггер

Похожие вопросы:

ответ
Поинт - позиция юнита
Группа - создать группу
Выбрать всех юнитов вокруг героя, добавить в Группу
Инт - количество юнитов в Группе
От 1 до Инт
Цикл:
-Установить Таргет = рандом юнит из группы
-Создать Дамми в Поинт
-Приказать последнему созданному замедление(Альянс) на Таргет
-Добавить таймер последнему созданному 0.50
-Убрать Таргет из Группы
-Установить Таргет = нет б.е.
Очистить Группу
Удалить Поинт
call DestroyGroup(udg_Group)
set udg_Group = null
set udg_Point = null
ответ
тема абилки с зарядами. что-то код с мем хаком плодят разный
я эту фишку тестил. там по факту, значение меняется. Но визуально нет (не отрисовывается).
ответ
8gabriel8,
Если что, скидывай карту.
Беда в том, что эта карта из кампании, там всё очень много весит, потому не буду.
PT153,
ну как там дела?
Пока никак, ибо из-за сессии отложил редактор в сторону (собственно, даже сюда времени зайти не было, к сожалению)
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать.
8gabriel8,
мне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Триггер, запускающий таймер, вряд ли многое испортить может
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Цитата из вопроса, у меня не работает голова.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.
ответ
quq_CCCP:
Ну хоть сделал бы нормальное условие, это кривое + плодит утечки, лучше использовать event units in range или Unit enters in region.
А какие утечки он плодит?
Решил эту проблему таким способом:
А именно: Если на слоте игрока есть игрок, то проверяются наличие его юнитов в зоне ворот, если же на слоте нет игрока, то условие игнорируется.
ответ
Так тебе вджасс нужен)


Вджасс это дополнение к обычному джассу, у себя ты можешь видеть строки объявления библиотеки, продвинутые комментарии и статические константные переменные


23

» WarCraft 3 / Нужно определить угол

Похожие вопросы:

ответ
Проверка угла между углом поворота юнита facing angle и угла между координатами. У бриста довольно примитивно сделана пассивка, опен доту глянь.
ответ
Всё, разобрался, вопрос снимаю)
ответ
Примерно так получилось
function Trig_CW_Cast_Actions takes nothing returns nothing
    local unit u    = LoadUnitHandle( какая_нибудь_хештаблица, GetHandleId(GetExpiredTimer()), 0 )
    local real x1   = GetUnitX( u ) //координаты кастера
    local real y1   = GetUnitY( u )
    local real from = 800
    local real a    = GetUnitFacing( u ) //угол поворота юнита
    //local real S = 90 //Ширина угла
    //local real angle = S/2 //Половина ширины угла

    set udg_Angle = a
    set udg_Caster = u
    //set udg_X = angle

    call BJDebugMsg("Угол поворота при касте: "+ R2S(a))

    call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,from, Condition(function TZZ))
    //call ForGroup( bj_lastCreatedGroup, function TZZ )
    call GroupClear(bj_lastCreatedGroup)
    
    set u = null
endfunction

function TimerOff takes nothing returns nothing
    local timer t  = GetExpiredTimer()
    local timer t2 = LoadTimerHandle( какая_нибудь_хештаблица, GetHandleId(t), 0 )
    
    call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t)  )
    call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t2) )
    call DestroyTimer( t  )
    call DestroyTimer( t2 )
    
    set t  = null
    set t2 = null
endfunction

function Timer takes nothing returns nothing
    local timer t  = CreateTimer()
    local timer t2 = CreateTimer()
    local unit  u  = GetTriggerUnit()
    
    call SaveUnitHandle( какая_нибудь_хештаблица, GetHandleId( t ), 0, u )
    call TimerStart( t, /*Периодичность*/0.04, true, Trig_CW_Cast_Actions )
    
    call SaveTimerHandle( какая_нибудь_хештаблица, GetHandleId(t2), 0, t )
    call TimerStart( t2, /*Время которое будет работать таймер*/36, false, TimerOff )
    
    set t  = null
    set t2 = null
    set u  = null
endfunction

//===========================================================================
function InitTrig_Cast takes nothing returns nothing
    set gg_trg_Cast = CreateTrigger(  )
    set bj_lastCreatedGroup = CreateGroup()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_CW_Cast_Conditions ) )
    call TriggerAddAction( gg_trg_Cast, function Timer )
endfunction
ответ
Неразрушаемые декорации очень геморройны, особенно отсутствие многих триггеров в разделе animation. Уж лучше браться за изменение через РО/макс. угол поворота или же макс. угол крена, а затем скрыть декорацию и показать только в нужное для игрока, время
ответ
Равно в варике округляет, а вот неравно - нет. У тебя и выводит 90.000, потому что R2S округляет до 3-го знака, а на самом деле там было что-то вроде 89.999999. 90 != 89.999999 в варике, потому условие прошло. Хочешь, чтобы не прошло, используй not (90 == angle). Тогда 89.999999 округлится до 90 и условие не пройдёт.

Либо используй то, что показал Скорп, тоже подойдёт.

23

» WarCraft 3 / Модель

Похожие вопросы:

ответ
Поиск по сайту, если не нашлось, сперва сюда:
Потом сюда:

В следующий раз за такие темы будут варны.
ответ
~8gabriel8:
Пересчитай границы, если не поможет, то приложи модель.
ответ
В 2 местах у разрушаемого объекта надо ставить модель импортированную.
ответ
Shakral, вот.

23

» WarCraft 3 / Анимация атаки.

Похожие вопросы:

ответ
Создаешь 2 модельки, у одной анимация стрельбы, у другой удара штыком. За тем создаешь 2 юнитов с разными модельками и при смене режима (на базе любого метамарфоза) меняешь юнита.
Все анимации атаки вписанные в юнита будут задействованы рандомно, даже если прикажешь триггером использовать конкретную анимку. Дабы избежать этого, нужно использовать лишь одну анимацию атаки.
ответ
8gabriel8:
Вроде ему наоборот надо Spell Throw -> Attack.
с Attack на Spell Throw

zetreisu, открываете модель в mdlvis жмакаете F3, выбераете нужную анимацию, переименовываете, жмакаете Enter и сохраняете модель при выходе.
ответ
XGM Bot:
Похожие вопросы:

ответ
тогда лучше всего удалить анимацию, наименее костыльный метод
ответ
8gabriel8:
Вроде ему наоборот надо Spell Throw -> Attack.
с Attack на Spell Throw

zetreisu, открываете модель в mdlvis жмакаете F3, выбераете нужную анимацию, переименовываете, жмакаете Enter и сохраняете модель при выходе.

ответ
SetUnitAnimationByIndex( whichUnit, index )
whichUnit - ваш юнит
index - необходимый индекс

23

» WarCraft 3 / Как работают триггеры?

Похожие вопросы:

ответ
prog помог в личке в Дискорде, вот решение
Решение
do
  local f = InitGlobals -- записываем InitGlobals в переменную
  function InitGlobals() -- заменяем оригинальную InitGlobals своей
       f() -- вызываем оригинальную InitGlobals из переменной
       InitMyTrigger()
  end

end

function InitMyTrigger()
   
 local SpellTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
    end
    TriggerAddAction(SpellTrigger, function()
        local eventId          = GetHandleId(GetTriggerEventId())
        local caster           = GetTriggerUnit()
        local casterX, casterY = GetUnitX(caster), GetUnitY(caster)
        local spellId          = GetSpellAbilityId()
--        local spellX, spellY   = GetSpellTargetX(), GetSpellTargetY()
        if spellId == FourCC('A000') then -- Призыв
            print("призыв")
            local newu = CreateUnit(GetOwningPlayer(caster), FourCC('h000'), casterX, casterY, GetUnitFacing(caster))
        end
    end)
end
ответ
RobertStevenson, вейты вообще зло, а отсчёт можно сделать таймером. Точнее и без неожиданных багов.
Ждать пока - это вейт в цикле, работает это просто отвратно, сам с этим сталкивался. Лучше заменить на событие смерти колдуна.

Я всё же думаю, что дело не в вейтах. Выводи имя героя Hero[A]. Лучше выводить так: ("герой - ") + (Имя юнита (Hero[A])) + " " + (Число в строку (А)).
Если нет имени - героя просто нет в этой переменной.
ответ
Вставь этот русификатор, он и в джнгп работает норм
ответ
Уже дошел методом тыка, нужно было использовать triggering unit. Мда.

23

» WarCraft 3 / Триггерный урон от способности

Похожие вопросы:

ответ
юнит получает урон
1 ответ на 2 вопроса
ответ
Наименее ресурсозатратным для игрового процесса будет кастовать саму волну через отдельного дамми, который создаётся специально и только для волны силы. Сама волна наносит 1 ед урона. И потом определив, тип юнит-источника урона - наносим нужный урон от лица героя-хозяина юнита "волна силы".
В варианте "чекать группы каждые 0.0х сек" будет засоряться память и скорее всего будут подлагивания, в варианте со спец-дамиками засорится РО, выбирай из двух зол.
ответ
Astra, очень багано
так как после последней атаки может многое изменится
так же урон при событие юнит получает урон зависит от брони и прочих резистов
если юнит с уроном 100 нанёс удар по врагу с физ резистом 50% а потом получил бафф/предмет на +100 урона то скилом нанесёт 50 урона хотя должен был бы нанести 200
тут нужно юзать бд
при касте скила брать из бд начальный урон юнита, бонусы предметов и бонусы всех бафов
тема кстати уже много раз поднималась
и каждый раз все заканчивалось тем что афтар забивал на подобную систему либо писал "вы все нубы/тролли и не знаете/не хотите сказать как сделать это легко и просто"
ибо подобная система требует кучи кода и как минимум 30 прочтённых статей по jass
вот статья о бд
ответ
Yonsen, обычно юзают предметную способность "запас здоровья" до 999999к хп. Обычно на все случаи жизни, любимый метод. Даем ее в момент нанесения урона. Когда срабатывает событие "юнит получает", то в этот момент урон еще не произошел, нам как бы оповешают, что он будет через 0.00 сек. Получает пассивку и через 0.00 сек урон. Потом хилим. И удаляем способность. Все.
ответ
~8gabriel8:
Ещё можешь наносить вместо отравления иной бафф, а отравлять даммиком. По этому баффу сможешь различать урон от автоатаки и способности.

23

» WarCraft 3 / Инком от маны

Похожие вопросы:

ответ
Сохраняй и меняй через таймер с временем 0.00 сек.
ответ
А еще лучше можно жаровню илидана заюзать для сжигания маны и срабатывания событий, которые вызываются при включении и выключении этой горелки. Причем она еще и сама автоматически выключится, когда закончится мана.
ответ
  1. Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
  2. Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
  3. Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.
ответ
TeX13, подмена абилок? удаляешь одну даешь другую
ответ
Макс мана - Мана

23

» IrInA Host Bot / Создание игры

Похожие вопросы:

ответ
Напишите !checkme в игре на канале
ответ
Странно, что эта подписка показывается вам. Где вы создаете игру?

Пересмотрев прошлый вопрос, я так понял вы создаете игру на iccup, yes? Если так, то вам надо купить ВИП подписку. (теперь повер ап и вип одно целое) Если же вы не желаете покупать подписку, вы можеет бесплатно хостить через сайт. (вход осуществляется через ирина коннектор, статья про неё, хоть и старая, но есть.)
ответ
Эту карту на ирине можно играть только на автохосте

23

» WarCraft 3 / Анимация у модели

Похожие вопросы:

ответ
Ответ из 2020 на lua
function PlayUnitAnimationFromChat()
    local this=CreateTrigger()
    TriggerRegisterPlayerChatEvent(this,Player(0),"",true)
    TriggerAddAction(this, function()
        local s=S2I(GetEventPlayerChatString())
        SetUnitAnimationByIndex(mainHero,s)
        --print(GetUnitName(mainHero).." "..s)
    end)
end
mainHero - глобалка юнит
Вводим в чат цифру и юнит воспроизводит анимацию
ответ
ledoed, были там анимации, в шапке проблема подробно описана.
это кароч оказалась мертвая тема искать проблему, тупо перенес мясо на рабочую модельку и заново запилил анимки.
Но если вдруг кто-то отпишется с решением проблемы после, то изменю лучший ответ
ответ
Навряд ли тебе будет кто-то что то объяснять, так что опишу на пальцах.

War3ModelEditor - лично использую только для просмотра моделей создания эффектов и правильного наложения текстур. Mdlvis - можно использовать для создания костей и анимации но только на версии 1.39 и то это будет очень не простое дело. По поводу соединения вершин в mdlvis вроде есть такая штучка.

Можно так же научиться владению софтом за границами Warcraft. 3dsmax или Maya в принципе хороший выбор можно начать с освоения эти двух прог и потом через плагин Neodex для 3dsmax перегонять в формат варика. Maya самый вроде как доступный и удобный софт для создания анимаций. Если не хочешь мучатся с этим софтом то с прогами чисто для варика будет сложнее склепать что-то достойное.

Анимированнию увы не научу, сложно вспомнить как я наверстал знания в этой области. Но точно помню что все началось с этой статьи, а там методом проб и ошибок я понял основные составляющие анимации. Дальше я начал по инету собирать кусочки информации как и что делать.

В принципе все, это не советы, а скорее наводка на то что тебе стоит искать или осваивать.
ведь это сложнейшая часть считается.
Для кого как! В специализированных прогах для этого есть куча иструментов которые автоматизируют многие процессы. Из за их отсутствия в Mdlvis создание анимации превращается в пытку которой нет конца. Вот например для меня самая невыносимая часть это текстурирование, вечно недоволен результатом своей роботы, но это только в том случаи если текстуру я не могу нарисовать сам.
ответ
XGM Bot:
Похожие вопросы:

ответ
прочитать правила импорта текстур, которые пишут рядом с моделью
чаще всего нужно удалить все строки в импорте, чтобы осталось TextureName.blp
ответ
~8gabriel8:
Определил причину невидимости модели после сохранения в war3me. В Geoset Animation Manager должна стоять Alpha 1, а он почему-то делает 0 или -1.

Поставил в Geoset Animation Manager не глобальные Color и Alpha, а для первых кадров всех 6 анимаций. Стало всё нормально и триггерные костыли не нужны.
Модель красного свечения ауры на юнитах:
Карта с этой аурой:
А отредактировать mdx в HEX-редакторе не сумел.
ответ
~8gabriel8:
Hate, вообще-то указал, что текстура за тобой, а ты вынудил меня напрягаться(
Хотя режим же сменил с Transparent на Blend, так что правильно всё
ответ
Bergi_Bear, видимо да.
GreatGorgile, это сбитые нормали, можешь вручную в мдлвизе их повернуть, но в максе это делается в один клик
ответ
Vann009:
Мне кажется, дело в том, что движок третьего варкрафта умеет работать только с низкополигональными моделями (впрочем, я могу ошибаться, но глюки с тенями у меня были только на "сложных" моделях с гладкими углами)
Переимпортировал модель, заменил редактор и всё работает.

ответ
Видимость же не отключена?

23

» WarCraft 3 / Триггерный скилл

Похожие вопросы:

ответ
Bender2000, код самой игры переписывать не надо
чтобы сделать триггерные скилы в обычном мили надо изменить несколько файлов в mpq архивах
триггеры на чистом jass пишутся в Blizzard.j а сами скилы делаются в слк
но для игры по сети у всех игроков должны быть твои mpq вместо стандартных
ответ
Ошибка в коде, jass работает везде. pro100master, пишет бред, ибо незнает что все карты для warcraft 3 имеют сценарий на Jass, т.к все ваши триггеры в итоге преобразуются в jass и хранятся в war3map.j, тоже самое и с АИ, которое для кампаний изначально написано на jass и прекрасно работает.
Смотрите где у вас ошибки, cjass\vjass интерпретаторы могут не верно работать с картами кампаний, пробуйте написать код на чистом jass без надстроек.
ответ
Окс, 5 мин

Вот что я хотел сделать на гуи, там какая-то фигня вообще происходила, что юнит скилл кидать не хотел (даже без ждать 0.10)

Давай попробуем на джасе))
Бтв, если ты знаешь джасс, то что это вообще за вопросы)
ответ
Здравствуй, посмотрел карту, на счет вейтов кстати не думаю хорошая идея ими пользоваться, но вызывать какую именно "щупальце" в принципе можно сделать так(проверкой на уровень способности) и все это будет одним триггером
тоже самое можно и с первыми 3 сократить в 1, простой проверкой на уровень способности
ответ
Чистая геометрия. Дано 2 точки, начало скачка и конец, расположены они на условном прямоугольнике на противоположных сторонах самых коротких краёв. Следовательно нужно нарисовать этот прямоугольник обычным rect (областью) между этими точками и дать урон в этой области. Не написан метод реализации:GUI, JASS, LUA кстати.

23

» WarCraft 3 / Количество глобальных переменных

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
даже наличие 2000 глобальный переменных особо не скажется на производительности, значение лишь имеет их обнуление и само использование в коде карты
ответ
- Я использую это:
struct linkedList
        private  static  constant  timer     period  =  CreateTimer( )
        private                    thistype  prev
        private                    thistype  next


        private stub method destroy takes nothing returns nothing

//          Здесь должен находится Ваш код.

            set  this.prev.next  =  this.next
            set  this.next.prev  =  this.prev

            if ( thistype( 0 ).next == 0 ) then
                call PauseTimer( thistype.period )
            endif

            call thistype.deallocate( this )
        endmethod


        private static method iterate takes nothing returns nothing
            local  thistype  this  =  thistype( 0 ).next

            loop
                exitwhen ( this == 0 )

//              Здесь должен находится Ваш код.

                call this.destroy( )

                set  this  =  this.next
            endloop
        endmethod


        private static method create takes nothing returns thistype
            local  thistype  this  =  thistype.allocate( )

            set  this.next         =  thistype( 0 )
            set  this.prev         =  thistype( 0 ).prev
            set  this.next.prev    =  this
            set  this.prev.next    =  this

//          Здесь должен находится Ваш код.
            
            if ( this.prev == 0 ) then
                call TimerStart( thistype.period, 0.03125, true, function thistype.iterate )
            endif

            return this
        endmethod


    endstruct
static method create takes nothing returns nothing
static method iterate takes nothing returns nothing
method destroy takes nothing returns nothing
Для работы этого двусвязного списка требуется создать 2-е переменные с именами next, prev.
ответ
ScopteRectuS, Переменные инициализируются при инициализации карты, она же вроде как глобальная udg_HeroGFL_owner. Или в коде карты насильно инициализировать?
Они же не локалки
ScopteRectuS, м, реально null возвращает боевая единицы. Смешно. Окей: И как ему определить созданную во время игры боевую единицу?
ответ
Есть играбельная карта с 200к глобалок...
Забей кароче на их число, лишь бы они работали правильно.

23

» WarCraft 3 / Проблемы с морфом

Похожие вопросы:

ответ
a.Kashtan:
VetsaN, Именно.
В редакторе способностей найди строчку с анимацией и попробуй прописать анимацию, отличную от морфа.
ответ
Artem48, быстро воскрешаете, бага варкравта.
ответ
Отлично, значит мы можем однозначно соотнести номер игрока с юнитом в массиве?
  • переключившихся в летающий режим героев добавляем в глобальную группу
  • запускаем таймер на малом периоде, что-то около 0.04, который перебирает всех в группе и выполняет смещение к взятой из массива точке со скоростью движения героя (тут можно экспериментировать с разными алгоритмами движения, главное что все данные мы можем легко получить из массива по номеру игрока которому принадлежит юнит)
  • отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
  • при отключении полета убираем героя из группы и перестаем отслеживать его приказы

А, т.е. в карте уже есть системы триггерного движения? Значит самое время унифицировать их в одну, чтобы одна и та же система управляла и полетом и физикой и другими видами триггерного движения.
ответ
Я так понимаю телепорт на цель, тогда всё просто GetSpellAbilityTarget().
ответ
Вариант без даммика:
Есть способность предмет "увеличение поля зрения" с иконкой телескопа (Alsi) добавляй его в здание, когда туда кто то заселяется и убирай когда здание пустует
(в способности можно указать радиус поля зрения)
Вариант с даммиком: вешай на здание способность Магический огонь (Afae)

23

» WarCraft 3 / Как сделать

Похожие вопросы:

ответ
в статьи
там есть пример создание своего ресурса
ответ
N7 Molot:
Все намного проще чем Вы думаете. В меню редактора "Сценарий => Дополнительно" есть такая галочка, называется "Скрытые области частично видимы", убери эту галочку и будет тебе магия)
p.s.: Если сразу не включится функция пересохрани карту и перезапусти варик.
ответ
Если охото сделать зарыды со счетчиком то тут 2 пути:
  1. Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
  2. Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
ответ
Какой точный вопрос, однако.
Ответ: триггерно, либо в редакторе объектов, если нужно изменить характеристики, не создаваемые/изменяемые триггерно.
Попытаюсь сыграть в экстрасенса, подстрахуюсь логикой:
Если нужно, чтобы изменялась характеристика количественно, т.е, например, увеличивался наносимый урон, то в действии нанесения урона вместо точного значения нужно выставить функию (формулу, зависимость etc.) имеющую аргументом уровень способности.
Если нужно менять характеристику качественно, например, тип наносимого урона, то следует использовать условия, сравнивающие уровень способности с нужным значением и... далее есть несколько вариантов реализации, но наиболее подходящий - просто выполнять все последующие действия триггера внутри оператора, а затем создать несколько раз скопировать его для других условий. Хотя, с точки зрения программирования, это не очень хороший вариант.
ответ
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя